package com.zzjson.thread.reset;

import java.util.concurrent.TimeUnit;

/**
 * <p>****************************************************************************</p>
 * <p><b>Copyright © 2010-2019 shuncom team All Rights Reserved<b></p>
 * <ul style="margin:15px;">
 * <li>Description : 通过异常恢复线程</li>
 * <li>Version     : 1.0.0</li>
 * <li>Creation    : 2019年08月02日</li>
 * <li>@author     : zzy0_0</li>
 * </ul>
 * <p>****************************************************************************</p>
 */
public class ExceptionThreadDemo {
	private static int i;

	/**
	 * hread.interrupted()是属于当前线程的一个操作，阻塞状态线程中断 是当前线程对外界中断进程的回应，表示已经收到了中断信号，
	 * 但是不会立即中断，需要让外界知道，现在不能中断
	 * ，在中断之前会复位并抛出异常
	 *
	 * @param args
	 * @throws InterruptedException
	 * @see ThreadResetDemo
	 */
	public static void main(String[] args) throws InterruptedException {
		Thread thread = new Thread(() -> {
			//线程状态默认是 false
			while (!Thread.currentThread().isInterrupted()) {
				try {
					System.out.println("BeforeException------" + Thread.currentThread().isInterrupted());
					//中断一个处于阻塞状态的线程 ，就会抛出异常  join/wait/queue.take。。这三种需要外部条件去停止
					TimeUnit.SECONDS.sleep(10);
					System.out.println("demo");
				} catch (InterruptedException e) {
					// InterruptedException 表示当前线程不一定中断
					//出现异常，可以处理，可以不处理
					System.out.println("afterException-----" + Thread.currentThread().isInterrupted());
					e.printStackTrace();
					// break;
				}
			}
			System.out.println("i=" + i);
		});
		thread.start();
		TimeUnit.SECONDS.sleep(1);
		//中断线程 把isInterrupted设置成true
		thread.interrupt();
		//	发现中断 把中断设置为 false
		System.out.println("-----" + thread.isInterrupted());

	}
//	interrupted 并不一定线程会结束
}